import store from "@/store";
import axios from "axios";
//创建axios实例
const instance = axios.create({
    //基本请求路径的抽取
    baseURL: "http://520it.com:8081/cms",
    // 这个时间是每次请求的过期时间，这次请求认为20秒之后这个请求就是失败的
    timeout: 20000
})

//请求拦截器————拦截每一次请求
instance.interceptors.request.use(config => {
    //什么时候执行这个函数？？ 每一次请求出去之前执行
    //config  本次请求的相关信息

    // console.log(config);

    //这个函数里面要做什么？？ 可以做一些请求之前的准备工作，例如设置请求头，携带token
    //如果用户是有登录的，请求就应该带上token值
    let token = localStorage.getItem("x-auth-token");
    if (token) {
        //添加请求头
        config.headers["x-auth-token"] = token
    }
    // console.log("请求头:",config);

    //必须返回config，才能真正发起请求
    return config
}), err => {
    return Promise.reject(err)
}

//响应拦截器
instance.interceptors.response.use(res => {
    //什么时候执行这个函数？？ 后端返回数据，并且在组件内部接收之前 执行这个函数
    //res 是？ 是axios给我们封装的一个响应对象
    //res.data才是真正的后端给我们的数据可以进行统一处理
    //这个函数的作用：对后端给我们的数据可以进行统一处理
    // console.log("响应拦截器的res为：",res);
    // console.log("响应拦截器的res.data为：",res.data);

    //业务失败的统一处理
    //方法一
    let arr = [0, 400, 407]
    // if (res.data.code !== 0 && res.data.code != 400 && res.data.code !== 407) {
    if (!arr.includes(res.data.code)) {
        //判断失败，表示用户失败
        // alert(res.data.message)
        store.dispatch("handleToast/asyncChangeIsShowToast", {
            msg: res.data.message,
            type: "danger"
        })
        // console.log("是啥：",res.data);
        return false
    }

    // 业务失败的统一处理
    //方法二
   /*  if (res.data.code !== 0 && res.data.code !== 400 && res.data.code !== 407) {
        // 判断失败，提示用户失败
        // alert(res.data.message)
        store.dispatch("handleToast/asyncChangeShowToast", {
            msg: res.data.message,
            type: "danger"
        })
        // console.log(res);
        return false;
    } */


    //依旧需要返回res对象，组件内部才能拿到这个res相关数据
    return res.data
}, err => {
    //请求失败的处理
    store.dispatch("handleToast/asyncChangeIsShowToast", {
        msg: res.data.message,
        type: "danger"
    })
    return Promise.reject(err)
})

export default instance